package com.kgc.sbt.api;

import com.kgc.sbt.beans.*;
import com.kgc.sbt.utils.PageSupport;

import java.util.List;

/**
 * Created on 2021/8/17.
 * <p>
 * Author: wuqilong
 * <p>
 * Description: 订单业务处理接口
 */
public interface OrderApi {

    /**
     * @author : 武
     * @date : 2021/8/20
     * @return : java.lang.Integer
     * @description : 依据token获取用户id
     */
    Integer selectUserIdByToken(String token);

    /**
     * @author : 武
     * @date : 2021/8/18
     * @return : java.util.List<com.kgc.sbt.beans.Cart>
     * @description : 获取用户在购物车中选中的商品
     */
    List<Cart> getCartInfo(Integer userId);

    /**
     * @author : 武
     * @date : 2021/8/18
     * @return : com.kgc.sbt.beans.Address
     * @description : 获取用户联系地址信息
     */
    Address getAddressInfo(Integer userId);

    /**
     * @author : 武
     * @date : 2021/8/20
     * @return : java.util.List<com.kgc.sbt.beans.UserCoupons>
     * @description : 判断用户拥有的优惠券信息
     */
    List<UserCoupons> getCouponsInfo(Integer userId);

    /**
     * @author : 武
     * @date : 2021/8/19
     * @return : com.kgc.sbt.beans.Vip
     * @description : 判断用户会员状态
     */
    int getVipInfo(Integer userId);

    /**
     * @author : 武
     * @date : 2021/8/19
     * @return : boolean
     * @description : 将订单插入订单主表中
     */
    boolean putOrderMain(OrderMain orderMain);

    /**
     * @author : 武
     * @date : 2021/8/19
     * @return : com.kgc.sbt.beans.Product
     * @description : 根据商品id查询商品信息
     */
    Product getProductById(Integer productId);

    /**
     * @author : 武
     * @date : 2021/8/19
     * @return : boolean
     * @description : 将订单插入订单详情表中
     */
    boolean putOrderDetail(OrderDetail orderDetail);

    /**
     * @author : 武
     * @date : 2021/8/19
     * @return : boolean
     * @description : 更改用户积分
     */
    boolean updUserPoints(Integer userId, Integer integral);

    /**
     * @author : 武
     * @date : 2021/8/19
     * @return : boolean
     * @description : 更改商品库存
     */
     boolean updProductStock(Integer productId, Integer quantity);

    /**
     * @author : 武
     * @date : 2021/8/17
     * @return : java.util.List<com.kgc.sbt.beans.OrderMain>
     * @description : 根据订单状态查询订单
     */
    PageSupport<OrderMain<OrderDetail>> getOrderByStatus(Integer userId, Integer orderStatus, Integer currPageNo, Integer pageSize);

    /**
     * @author : 武
     * @date : 2021/8/17
     * @return : java.lang.Integer
     * @description : 根据订单编号查询订单状态，物流id
     */
    OrderMain getStatusByOrderNum(String orderNum);

    /**
     * @author : 武
     * @date : 2021/8/17
     * @return : com.kgc.sbt.beans.LogisticsInfo
     * @description : 查询物流信息
     */
    LogisticsInfo getLogisticsInfo(Integer logisticsId);

    /**
     * @author : 武
     * @date : 2021/8/18
     * @return : com.kgc.sbt.beans.Stock
     * @description : 根据商品ID查询商品库存
     */
    Stock getStockById(Integer productId);

    /**
     * @author : 武
     * @date : 2021/8/18
     * @return : boolean
     * @description : 将用户设置的到货提醒信息插入数据库中
     */
    boolean putArrivalReminder(Integer userId, Integer productId, String userPhone);

    /**
     * @author : 武
     * @date : 2021/8/18
     * @return : java.util.List<com.kgc.sbt.beans.ArrivalReminder>
     * @description : 查询到货提醒表中的所有信息
     */
    List<ArrivalReminder> getAllArrivalReminder();

    /**
     * @author : 武
     * @date : 2021/8/18
     * @return : boolean
     * @description : 将用户设置的到货提醒信息从数据库中删除
     */
    boolean delArrivalReminder(Integer reminderId);

    /**
     * @author : 武
     * @date : 2021/8/23
     * @return : java.util.List<com.kgc.sbt.beans.Stock>
     * @description : 查询库存为0的商品信息
     */
    List<Stock> getAllStock();

    /**
     * @author : 武
     * @date : 2021/8/23
     * @return : boolean
     * @description : 依据商品id修改商品库存
     */
    boolean updStock(Integer productId, Integer count);

    /**
     * @author : 武
     * @date : 2021/8/23
     * @return : boolean
     * @description : 删除用户使用过的优惠券
     */
    boolean delCoupons(Integer couponsId);

    /**
     * @author : 武
     * @date : 2021/8/25
     * @return : java.util.List<com.kgc.sbt.beans.UserCoupons>
     * @description : 判断用户是否拥有此类型的且未过期的优惠券
     */
    List<UserCoupons> getCoupons(Integer userId, String couponsNum);

    /**
     * @author : 武
     * @date : 2021/8/23
     * @return : boolean
     * @description : 删除用户已购买的商品
     */
    boolean delCartProduct(Integer userId);
}
